package dbexp.utils;

/**
 * Interfejs nasłuchu operacji na kontenerze
 */
public interface ContainerListener<T> {
	/**
	 * Zdarzenie wywoływane podczas sprawdzania czy kontener zawiera sprawdzany obiekt
	 * @param test wartość sprawdzenia
	 * @return wartość sprawdzenia
	 */
	public boolean onCheck(boolean test);
	/**
	 * Zdarzenie wywoływane podczas pobierania obiektu z kontenera
	 * @param <T>
	 * @param obj obiekt z kontenera
	 * @return obiekt z kontenera
	 */
	public T onRead(T obj);
	/**
	 * Zdarzenie wywoływane podczas pobierania obiektu z kontenera
	 * @param obj obiekt z kontenera
	 * @param def domyślna wartość jeżeli obj == null
	 * @return obiekt z kontenera
	 */
	public T onRead(T obj, T def);
	/**
	 * Zdarzenie wywoływane podczas wstawiania obiektu do kontenera
	 * @param toInsert wstawiany obiekt
	 * @return wstawiany obiekt
	 */
	public T onInsert(T toInsert);
	/**
	 * Zdarzenie wywoływane podczas usuwania obiektu z kontenera
	 * @param toDelete czy usunąć obiekt
	 * @return czy usunąć obiekt
	 */
	public boolean onDelete(boolean toDelete);
	/**
	 * Zdarzenie wywoływane podczas aktualizowania obiektu w kontenerze
	 * @param t obiekt już istniejący
	 * @param toInsert wstawiany obiekt
	 * @return wstawiany obiekt
	 */
	public T onUpdate(T t, T toInsert);
	/**
	 * Ustawia kontener dostępny dla tego nasłuchu
	 * @param c kontener
	 * @return this
	 */
	public ContainerListener<T> set(Container c);
}
